import {ref} from 'vue';
import {defineStore} from "pinia";
import {BaseDirectory, readTextFile, writeTextFile} from "@tauri-apps/plugin-fs";

export const useFileStore = defineStore('fileStore', () => {
	// 文件树
	const fileTreeList = ref([]);
	// 文件根路径(主要用于创建文件使用)
	const fileRootPath = ref('');
	// 选中的文件地址
	const selectFileAddress = ref('');
	// 选中的文件内容
	const fileText = ref('');
	// 展开的文件树路径
	const expandedFileTree = ref([]);

	/**
	 * 设置文件树
	 * @param {Array} list - 文件树列表
	 * */
	function setFileTreeList(list) {
		fileTreeList.value = list;
	}

	/**
	 * 设置文件根路径
	 * @param {string} path - 文件根路径
	 * */
	function setFileRootPath(path) {
		fileRootPath.value = path;
	}

	/**
	 * 设置选中的文件地址
	 * @param {string} address - 文件地址
	 * */
	function setSelectFileAddress(address) {
		selectFileAddress.value = address;
	}

	/**
	 * 设置选中的文件内容
	 * @param {string} text - 文件内容
	 * */
	function setFileText(text) {
		fileText.value = text;
	}

	/**
	 * 设置展开的文件路径
	 * @param {array} expands - 展开的文件路径
	 * */
	function setExpandedFileTree(expands) {
		expandedFileTree.value.push(expands);
		saveDataToConfig({expanded: expands});
	}

	/** 获取文件相应的数据到pinia中 */
	async function getTreeDataFromConfig() {
		const fileTreeDataStr = await readTextFile('file-conf.json', {baseDir: BaseDirectory.AppLocalData});
		const fileTreeData = JSON.parse(fileTreeDataStr);
		expandedFileTree.value = fileTreeData.expanded;
	}

	/**
	 * 保存文件相应的数据到配置文件中
	 * */
	async function saveDataToConfig({openDir, expanded}) {
		const payload = {
			openDir: openDir || '',
			expanded: expanded || []
		}
		await writeTextFile('file-conf.json', JSON.stringify(payload), {baseDir: BaseDirectory.AppLocalData});
	}

	return {
		fileTreeList,
		fileRootPath,
		selectFileAddress,
		fileText,
		expandedFileTree,
		getTreeDataFromConfig,
		setFileTreeList,
		setFileRootPath,
		setSelectFileAddress,
		setFileText,
		setExpandedFileTree
	}
});